package com.jbookstore.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import com.jbookstore.dto.BookDto;
import com.jbookstore.dto.CartDto;
import com.jbookstore.dto.UserDto;
import com.jbookstore.service.CartService;
/**
 * 장바구니 관련 요청처리 클래스
 * @author 배혜원
 *
 */
@Controller
public class CartController extends CommonController {
	@Autowired private CartService cartService;
	
	/**
	 * 회원 아이디로 장바구니 조회
	 * @param userId
	 * @return
	 */
	@RequestMapping(value = "viewCartList.do", method = RequestMethod.GET)
	public ModelAndView viewCartList(@RequestParam("userId") String userId) {
		ModelAndView mav = new ModelAndView();
		
		logger.info(userId);
		// 회원아이디로 장바구니 조회 
		List<BookDto> cartBookList = cartService.getCartBookList(userId); 
		
		mav.setViewName("cart/viewCartList");
		mav.addObject("cartBookList", cartBookList);
		return mav;
	}
	/**
	 * 장바구니에 도서 하나씩 담기 
	 * @param bookId
	 * @return
	 */
	@RequestMapping(value = "addCartOne.do", method = RequestMethod.GET)
	public String addCartOne(@RequestParam("bookId") String bookId) {
		
		logger.info(bookId);
		
		//Session에 있는 회원 아이디 가져오기
		UserDto user = (UserDto) getHttpSession().getAttribute("loginUser");
		logger.info(user.getUserId());
		
		// 회원아이디로 이미 담겨져 있는 장바구니 가져오기
		List<BookDto> cartBookList = cartService.getCartBookList(user.getUserId()); 
		CartDto cartDto = new CartDto();
		
		//TODO : 비지니스 로직 Service로 빼야함 
		// 회원아이디와 도서아이디 장바구니 객체에 set
		cartDto.setUserId(user.getUserId());
		cartDto.setBookId(bookId);
		
		// 장바구니에 넣을 도서가 이미 담겨져 있는지 bookId로 확인
		for(BookDto book : cartBookList){
			// 이미 존재하는 도서
			if(book.getBookId().equals(bookId)){
				// 도서 수량 증가
				cartDto.setQty(book.getQty()+1);
				// 존재 도서 true set
				cartDto.setExistBookInCart(true);
				break;
				
			} else {
				// 존재 도서 false set
				cartDto.setExistBookInCart(false);
			} //end else
		}// end if
		
		
		// 존재 하는 도서 
		if(cartDto.isExistBookInCart()){
			logger.info("이미 존재 도서 수량 update"+cartDto.toString());
			// 장바구니 수정
			cartService.modifyCartOne(cartDto);
			
		} else{
			logger.info("새로운 도서 insert"+cartDto.toString());
			cartDto.setQty(1);

			// 장바구니 담기 
			cartService.addCartOne(cartDto);
		}
		
		
	
		return "redirect:viewCartList.do?userId="+user.getUserId();
	}
	/**
	 * 장바구니에 도서 하나씩 삭제
	 */
	@RequestMapping(value = "removeCartOne.do", method = RequestMethod.GET)
	public String removeCartOne(@RequestParam("bookId") String bookId) {
		
		logger.info(bookId);
		
		UserDto user = (UserDto) getHttpSession().getAttribute("loginUser");
		logger.info(user.getUserId());
		CartDto cartDto = new CartDto();
		cartDto.setBookId(bookId);
		cartDto.setUserId(user.getUserId());
		
		logger.info(cartDto);
		// 장바구니 담기 
		cartService.removeCartOne(cartDto); 
		return "redirect:viewCartList.do?userId="+user.getUserId();
	}
}
